package edu.seminario

import edu.seminario.utils.TipoBusqueda

class BusquedaPorRestosService extends BusquedasService {

	public def ejecutarQuery(def criterios) {
		
		def c = RestoCaracteristica.createCriteria()
		def results = c.list {
			restos {
				and {
					def nombre = criterios.get("nombre").getValor()
					if (nombre) {
						eq("nombre", nombre)
					}
					eq("cocina", criterios.get("tipoCocina").getValor())
				}
				or {
					eq("zona", criterios.get("zona").getValor())
					eq("subzona", criterios.get("zona").getValor())
					between("precioM", criterios.get("rangoPrecio").getValor().getMinimo(),
						criterios.get("rangoPrecio").getValor().getMaximo())
					between("precioN", criterios.get("rangoPrecio").getValor().getMinimo(),
						criterios.get("rangoPrecio").getValor().getMaximo())
				}
			}
			caracteristicas {
				def caracteristicas = criterios.get("caracteristicas").getValor()
				if (caracteristicas) {
					eq("id", caracteristicas.id)
				}
			}
			maxResults(criterios.get("cantidadResultados").getValor())
		}
		List restos = []
		results.each { 
			restos.add(it.restos)
		}
		return restos
//		def c = Restos.createCriteria()
//		def results = c.list {
//			and {
//				def nombre = criterios.get("nombre").getValor()
//				if (nombre) {
//					eq("nombre", nombre)
//				}
//				eq("cocina", criterios.get("tipoCocina").getValor())
//				
//				resto -> caracteristicas
//				caracteristica -> restos
//				
////				def caracteristicas = criterios.get("caracteristicas").getValor()
////				if (caracteristicas) {
////					eq("caracteristicas", caracteristicas)
////				} else {
////					isNull("caracteristicas")
////				}
//			}
//			or {
//				eq("zona", criterios.get("zona").getValor())
//				eq("subzona", criterios.get("zona").getValor())
//				between("precioM", criterios.get("rangoPrecio").getValor().getMinimo(), 
//					criterios.get("rangoPrecio").getValor().getMaximo())
//				between("precioN", criterios.get("rangoPrecio").getValor().getMinimo(), 
//					criterios.get("rangoPrecio").getValor().getMaximo())
//			}
//			maxResults(criterios.get("cantidadResultados").getValor())
//			order("nombre", "desc")
//		}
//		return results
	}

	public TipoBusqueda getTipoBusqueda(){
		return TipoBusqueda.RESTOS
	}
}
